# Maintainer: Alexey Pavlov <alexpux@gmail.com>
# Contributor: Ray Donnelly <mingw.android@gmail.com>

_realname=lxml
pkgbase=mingw-w64-python-${_realname}
pkgname=("${MINGW_PACKAGE_PREFIX}-python2-${_realname}" 
         "${MINGW_PACKAGE_PREFIX}-python3-${_realname}"
         "${MINGW_PACKAGE_PREFIX}-python-${_realname}-docs")
pkgver=4.4.1
pkgrel=2
arch=('any')
license=('BSD' 'custom')
url="https://lxml.de/"
makedepends=("${MINGW_PACKAGE_PREFIX}-cython"
             "${MINGW_PACKAGE_PREFIX}-cython2"
             "${MINGW_PACKAGE_PREFIX}-epydoc"
             "${MINGW_PACKAGE_PREFIX}-libxml2"
             "${MINGW_PACKAGE_PREFIX}-libxslt"
             "${MINGW_PACKAGE_PREFIX}-python2"
             "${MINGW_PACKAGE_PREFIX}-python2-beautifulsoup4"
             "${MINGW_PACKAGE_PREFIX}-python2-cssselect"
             "${MINGW_PACKAGE_PREFIX}-python2-docutils"
             "${MINGW_PACKAGE_PREFIX}-python2-html5lib"
             "${MINGW_PACKAGE_PREFIX}-python3"
             "${MINGW_PACKAGE_PREFIX}-python3-beautifulsoup4"
             "${MINGW_PACKAGE_PREFIX}-python3-cssselect"
             "${MINGW_PACKAGE_PREFIX}-python3-html5lib")
source=("https://github.com/lxml/lxml/archive/${_realname}-${pkgver}.tar.gz"
        "mingw-python-fix.patch"
        "use-distutils-get_platform.patch"
        "allow-pass-path-to-rst2s5.patch")
sha256sums=('a735879b25331bb0c8c115e8aff6250469241fbce98bba192142cd767ff23408'
            'd5811e7c0be65d7e9ce59ad925466ac7dc95bdca05439be0becf2cca7bb9602a'
            'd50fefc47295d8c6eecf1ca42d03af43dc79d3debb52caf8edbed3b56df2f672'
            'ec4de74d02cc4f0d09c029c7e36063ff833e378b36993e8bb57b852ac5648b7c')

apply_patch_with_msg() {
  for _patch in "$@"
  do
    msg2 "Applying $_patch"
    patch -Nbp1 -i "${srcdir}/$_patch"
  done
}

prepare() {
  cd "${srcdir}/${_realname}-${_realname}-${pkgver}"
  apply_patch_with_msg mingw-python-fix.patch \
              use-distutils-get_platform.patch \
              allow-pass-path-to-rst2s5.patch

  cd "${srcdir}"
  for builddir in python{2,3}-build-${CARCH}; do
    rm -rf ${builddir} | true
    cp -r "${_realname}-${_realname}-${pkgver}" "${builddir}"
  done
}

build() {
  # It seems to me that CFLAGS and LDFLAGS aren't getting
  # converted to Windows versions when calling Python for
  # some reason?

  # Tried $(cygpath -m) to get -IC:/msys64/mingw32/
  # but that gets mangled to -IC;C:msys64msys64mingw32
  # PREFIX_WIN=$(cygpath -m $MINGW_PREFIX)
  # CPPFLAGS="$CPPFLAGS -I${PREFIX_WIN}/include/libxml2"
  # LDFLAGS="$LDFLAGS -L${PREFIX_WIN}/lib"

  # This horrible version works; needs the right amount of \\ to
  # escape the escapes. This stuff makes some of xslt-config
  # redundant (xslt-config *should* return C:/ paths but doesn't)
  PREFIX_WIN=$(cygpath -w $MINGW_PREFIX)
  PREFIX_WIN=${PREFIX_WIN//\\/\\\\}
  CPPFLAGS="$CPPFLAGS -I${PREFIX_WIN}\\\\include\\\\libxml2"
  LDFLAGS="$LDFLAGS -L${PREFIX_WIN}\\\\lib"

  for pver in {2,3}; do
    msg "Python ${pver} build for ${CARCH}"
    pushd "${srcdir}/python${pver}-build-${CARCH}"
    ${MINGW_PREFIX}/bin/python${pver} setup.py build \
         --with-xslt-config=${MINGW_PREFIX}/bin/xslt-config \
         --with-xml2-config=${MINGW_PREFIX}/bin/xml2-config \
         --with-cython --with-unicode-strings
    popd
  done

  cd "${srcdir}/python2-build-${CARCH}"
  make PYTHON=${MINGW_PREFIX}/bin/python2 RST2S5=${MINGW_PREFIX}/bin/rst2s5.py html
}

package_python2-lxml() {
  pkgdesc="Python2 binding for the libxml2 and libxslt libraries (mingw-w64)"
  depends=("${MINGW_PACKAGE_PREFIX}-libxml2" "${MINGW_PACKAGE_PREFIX}-libxslt" "${MINGW_PACKAGE_PREFIX}-python2")
  optdepends=("${MINGW_PACKAGE_PREFIX}-python2-beautifulsoup4: support for parsing not well formed HTML"
              "${MINGW_PACKAGE_PREFIX}-python2-cssselect: support for cssselect"
              "${MINGW_PACKAGE_PREFIX}-python2-html5lib: support for html5lib parser"
              "${MINGW_PACKAGE_PREFIX}-python-lxml-docs: offline docs")

  cd "${srcdir}/python2-build-${CARCH}"
  MSYS2_ARG_CONV_EXCL="--prefix=;--install-scripts=;--install-platlib=" \
    ${MINGW_PREFIX}/bin/python2 setup.py install --prefix=${MINGW_PREFIX#\/} \
    --root="${pkgdir}" --optimize=1 --skip-build \
         --with-xslt-config=${MINGW_PREFIX}/bin/xslt-config \
         --with-xml2-config=${MINGW_PREFIX}/bin/xml2-config \
         --with-cython --with-unicode-strings

  install -Dm644 LICENSES.txt \
    "${pkgdir}${MINGW_PREFIX}"/share/licenses/python2-${_realname}/LICENSE
  install -Dm644 doc/licenses/BSD.txt \
    "${pkgdir}${MINGW_PREFIX}"/share/licenses/python2-${_realname}/BSD.txt
  install -Dm644 doc/licenses/elementtree.txt \
    "${pkgdir}${MINGW_PREFIX}"/share/licenses/python2-${_realname}/elementtree.txt
}

package_python3-lxml() {
  pkgdesc="Python3 binding for the libxml2 and libxslt libraries (mingw-w64)"
  depends=("${MINGW_PACKAGE_PREFIX}-libxml2" "${MINGW_PACKAGE_PREFIX}-libxslt" "${MINGW_PACKAGE_PREFIX}-python3")
  optdepends=("${MINGW_PACKAGE_PREFIX}-python3-beautifulsoup4: support for parsing not well formed HTML"
              "${MINGW_PACKAGE_PREFIX}-python3-cssselect: support for cssselect"
              "${MINGW_PACKAGE_PREFIX}-python3-html5lib: support for html5lib parser"
              "${MINGW_PACKAGE_PREFIX}-python-lxml-docs: offline docs")

  cd "${srcdir}/python3-build-${CARCH}"
  MSYS2_ARG_CONV_EXCL="--prefix=;--install-scripts=;--install-platlib=" \
    ${MINGW_PREFIX}/bin/python3 setup.py install --prefix=${MINGW_PREFIX#\/} \
    --root="${pkgdir}" --optimize=1 --skip-build \
         --with-xslt-config=${MINGW_PREFIX}/bin/xslt-config \
         --with-xml2-config=${MINGW_PREFIX}/bin/xml2-config \
         --with-cython --with-unicode-strings

  install -Dm644 LICENSES.txt \
    "${pkgdir}${MINGW_PREFIX}"/share/licenses/python3-${_realname}/LICENSE
  install -Dm644 doc/licenses/BSD.txt \
    "${pkgdir}${MINGW_PREFIX}"/share/licenses/python3-${_realname}/BSD.txt
  install -Dm644 doc/licenses/elementtree.txt \
    "${pkgdir}${MINGW_PREFIX}"/share/licenses/python3-${_realname}/elementtree.txt
}

package_python-lxml-docs() {
  pkgdesc="Python binding for the libxml2 and libxslt libraries (docs) (mingw-w64)"
  options=('docs')

  cd ${srcdir}/python2-build-${CARCH}
  install -d "${pkgdir}${MINGW_PREFIX}"/share/doc/${_realname}
  cp -r doc/html "${pkgdir}${MINGW_PREFIX}"/share/doc/${_realname}
}

package_mingw-w64-i686-python2-lxml() {
  package_python2-lxml
}

package_mingw-w64-i686-python3-lxml() {
  package_python3-lxml
}

package_mingw-w64-x86_64-python2-lxml() {
  package_python2-lxml
}

package_mingw-w64-x86_64-python3-lxml() {
  package_python3-lxml
}

package_mingw-w64-i686-python-lxml-docs() {
  package_python-lxml-docs
}

package_mingw-w64-x86_64-python-lxml-docs() {
  package_python-lxml-docs
}
